package com.it.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.it.pojo.Product;
import com.it.pojo.vo.article.ArticleProductVO;
import com.it.pojo.vo.product.*;
import io.swagger.models.auth.In;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface ProductMapper extends BaseMapper<Product> {

    List<AdminProductVO> listAdminProductVO(
            @Param("provinceId") Integer provinceId,
            @Param("cityId") Integer cityId,
            @Param("startTime") String startTime,
            @Param("endTime") String endTime,
            @Param("start") Integer start,
            @Param("limit") Integer limit
    );

    Integer listAdminProductVOTotal(
            @Param("provinceId") Integer provinceId,
            @Param("cityId") Integer cityId,
            @Param("startTime") String startTime,
            @Param("endTime") String endTime,
            @Param("start") Integer start,
            @Param("limit") Integer limit
    );

    AdminProductEditVO getProductById(Integer productId);

    /**
     * 通过用户id获取到用户空间相关的漫展信息
     *
     * @param userId
     * @return
     */
    List<ProductSpaceVO> getProductInfoByUserId(@Param("userId") Integer userId);


    /**
     * 获取漫展首页的漫展信息
     *
     * @return
     */
    List<ProductVO> listProductVO(
            @Param("start") Integer start,
            @Param("limit") Integer limit,
            @Param("provinceId") Integer provinceId,
            @Param("cityId") Integer cityId,
            @Param("time") String time,
            @Param("nextTime") String nextTime
    );


    /**
     * 根据漫展id获取漫展详情页
     *
     * @param productId
     * @return
     */
    ProductDetailVO listproductsById(
            @Param("productId") Integer productId
    );

    List<ArticleProductVO> listArticleByProductId(@Param("productId") Integer productId);

    /**
     * 获取参加此漫展的人数
     *
     * @param productId
     * @return
     */
    Integer getProductDetailUserTotal(@Param("productId") Integer productId);


    /**
     * 根据漫展id查询购票相关信息
     *
     * @param productId
     * @return
     */
    ProductTicketVO getProductTicketInfo(@Param("productId") Integer productId);

    /**
     * 获取周边商品相关信息
     *
     * @return
     */
    List<ProductTypeVO> listProductTypeVO(@Param("typeId") Integer typeId, @Param("condtion") Integer condtion
            , @Param("keyWords") String keyWords
    );

    /**
     * 根据id获取商品周边
     *
     * @param productId
     * @return
     */
    ProductTypeVO listProductTypeVOById(@Param("productId") Integer productId);

    /**
     * 根据关键字搜索漫展相关信息
     *
     * @param start
     * @param limit
     * @param keyWords
     * @return
     */
    List<ProductVO> listProductByKeyWords(
            @Param("start") Integer start,
            @Param("limit") Integer limit,
            @Param("keyWords") String keyWords
    );

    Integer listProductByKeyWordsTotal(
            @Param("keyWords") String keyWords
    );
}
